Skip to content

🚀 [Feature]: Module repositories share one auditable baseline - #525

Open
Marius Storhaug (MariusStorhaug) wants to merge 31 commits into
mainfrom
template-standardization
Open

Marius Storhaug (MariusStorhaug) wants to merge 31 commits into
mainfrom
template-standardization

Conversation

@MariusStorhaug

@MariusStorhaug Marius Storhaug (MariusStorhaug) commented Aug 29, 2026 •

Copy link
Copy Markdown
Member

Module maintainers and agents can audit repositories against one executable Template-PSModule baseline while preserving repository-owned code and content. Standard module sites use the shared MSX presentation profile, native folder-derived navigation, and no cookie-consent prompt.

Removed: PR-template files from the module baseline

Pull requests use canonical MSX PR Format guidance, not repository-local or centrally inherited automatic template files. Audits treat their absence as intentional and report existing files as stale drift for separate removal work. Upgrades must not add, recreate, copy, or generate a PR-template file from an older template snapshot or restore a central fallback.

Authors keep the complete release record in the PR body and follow the canonical release-range-first method for release-bound changes. This bounded correction needs no caller-input, TestData, Pester-dependency, module-asset, or documentation-configuration changes; the other standardization work below is preserved.

Technical details

The user-directed correction is committed at d2786d5e974e2430f756612cd66fe9dde6603756, based on the verified #525 candidate 9c41fb1cce0a846af994100ead738b2e2ed5a84f. Its scoped implementation comparison changes only these three files, with 44 insertions and two deleted baseline rows:

Changed surface Standards checked Framework contract Result
docs/content/reference/repository-standard.md MSX PR Format, Repository Standard, Markdown No PR-template requirements or central fallback Fixed in this PR
Read-only repository audit Canonical PR authoring and non-mutating audits No standard/scaffold classification or recreation prompt for PR-template files Fixed in this PR
v8 upgrade skill Canonical PR authoring and scoped migration No local/central PR-template creation or recovery from an older snapshot Fixed in this PR

Test-first assertions failed nine of 14 checks on the assigned candidate; physical-file absence and the four preservation/scope checks passed. All 14 pass after the correction. Exact content comparisons preserve every unrelated paragraph and every other tracked path, including CONTRIBUTING, legal/ownership/client routes, community-policy defaults, caller/TestData/Pester contracts, Zensical configuration, navigation, consent and assets. No consumer repository or other owner's workspace was edited.

Targeted Markdown lint passes all three files; both plugin manifests parse and their identity/version agrees; all four skill YAML headers and relative skill links validate. Site TOML parses, both JavaScript syntax checks pass, the repository analyzer reports zero regression-script diagnostics, and zensical build --clean --strict completes without issues. The generated authoring section and seven reference tables were checked before task-created build output was removed.

Immutable source correspondence: Template-PSModule default commit ff935a5745db222c5f28e59df45931b617c2c50b has a complete 20-file inventory and no PR-template file; this correction therefore needs no new template PR. The separately owned stale PSModule/Template-PSModule#42 removal remains separate. The canonical owner froze MSXOrg/docs#209 at bc03a5992615f65d1d5346dc48e7506e80b8b6ca. The complete description example, release-first procedure, no-file repository policy and defaults source guidance are the current correspondence; old template-scaffold links are not current evidence. The source's five hosted checks and automated approval 5725019918 were independently verified on that exact source head. This does not approve #525, merge the canonical source, or complete other owners' removals.

Actual #525 readiness hold: GitHub reports this producer head unmergeable against current main 64ffb1d87f86bd5d487891fdb140b78385a00531 (mergeable_state: dirty). Docs and Linter are active workflows but no PR runs/checks exist on this head; only dynamic CodeQL/Actions analysis and the reviewer checks succeeded. Copilot review 5725014128 is COMMENTED on d2786d5e974e2430f756612cd66fe9dde6603756, with zero new inline comments but an explicit keyboard-sorting human-assessment flag. The unchanged vendor source assigns lowercase tabindex, while the initializer assumes focusable headers. That wider Zensical concern is outside the bounded no-file correction. The review's "No open issues" line and successful reviewer check are not clean approval. Current-main composition and full actual-head checks/review remain required. Keep #525 draft; no merge/rebase or auto-merge was performed or is authorized by this revision.

Additional declared-schema checks expose unchanged composition gaps: the plugin's declared schema rejects its existing /skills property, and the marketplace's declared schema URL returns HTTP 404. Their manifest blobs exactly match the assigned candidate. The local Copilot command is an unavailable installation shim, so installed-plugin validation is also blocked. These were not repaired by widening the no-file revision.

Related references

New: Read-only module repository audits

The PSModule plugin gains psmodule-repository-audit, a read-only comparison skill for one repository or a fleet campaign. It records the template commit, classifies template-owned and repository-owned paths, reports drift, and leaves remediation to separate delivery work.

Changed: Migration skills consume the template

The v8 and Zensical migration skills use Template-PSModule rather than embedding another copy of standard files. The v8 upgrade now requires the dedicated Pester 6.1.0 procedure to inventory and validate every test set instead of treating a declared dependency or one green workflow as sufficient.

Changed: Documentation follows folders

Process-PSModule no longer maintains an explicit Zensical navigation array or hides the Dictionary from the generated tree. Zensical derives navigation from folders, places index pages first, and orders remaining pages alphabetically. The site uses the MSX vendored table sorter and keyboard-accessible initializer.

Changed: Community and release defaults follow their owners

Process-PSModule keeps its repository-specific contribution guide under .github/. The standard Code of Conduct, security policy, and support guidance are provided by PSModule/.github; local copies are needed only for repository-specific overrides. .github/release.yml is not part of the baseline because Process-PSModule does not use GitHub's built-in release configuration. The coordinated template update reflects the same contract for new module repositories.


Technical details
  • Documents that every Process-PSModule change evaluates its impact on Template-PSModule; the audit skill does not maintain or edit either repository.
  • Removes the duplicate generated-module .github/zensical.toml from Process-PSModule. The executable module profile lives in Template-PSModule; this repository's hand-authored site keeps docs/zensical.toml.
  • Uses MSXOrg/docs as the shared Zensical presentation source while preserving Process-specific identity, content, snippets, consent, and social links.
  • Declares that [project.extra.consent] is not part of the generated-module template because that profile enables no cookie-based measurement.
  • Excludes vendored minified assets from repository-authored JavaScript linting, matching the MSX documentation workflow.
  • Replaces duplicated caller-workflow examples with links to the executable template and documents the controlled @v8 major reference.
  • Keeps Process-PSModule's contribution guide under .github and points to organization-owned Code of Conduct and support guidance; the documentation standard records the inherited community-policy exception and excludes release.yml from the baseline.
  • Adds the required Claude and Copilot route files and corrects stale documentation links.
  • Preserves the historical managed-file anchor after clarifying that automated distribution is not operating today.
  • Local validation: plugin manifests parse, both JavaScript files pass node --check, docs/zensical.toml parses, explicit nav is absent, the vendored scripts match the pinned MSX sources after line-ending normalization, the local contribution path exists without root duplicates, the organization-owned policy files exist, and zensical build --clean completes without warnings.
  • Template impact evaluation: 🪲 [Fix]: New modules inherit the current repository baseline Template-PSModule#53 aligns the portable generated-module profile and removes redundant local community-policy and release configuration files.
Changed surface Standards checked Framework docs checked Result
.github/plugin/** MSX fleet orchestration and comparative review PSModule migration contracts Fixed in this PR
.github/workflows/Docs.yml MSX GitHub Actions Documentation lint contract Fixed in this PR
.github/*.md MSX repository and community health PSModule repository standard Fixed in this PR
docs/** MSX documentation, Markdown, and Zensical design PSModule repository and pipeline docs Fixed in this PR
Agent route files MSX agentic development PSModule onboarding contract Fixed in this PR
Relevant issues (or links)

Related work

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@github-actions

github-actions Bot commented Aug 29, 2026 •

Copy link
Copy Markdown

Super-linter summary

Language Validation result
CHECKOV Pass ✅
GITHUB_ACTIONS Pass ✅
GITHUB_ACTIONS_ZIZMOR Pass ✅
GITLEAKS Pass ✅
GIT_MERGE_CONFLICT_MARKERS Pass ✅
HTML Pass ✅
JAVASCRIPT_ES Pass ✅
JAVASCRIPT_PRETTIER Pass ✅
MARKDOWN Pass ✅
NATURAL_LANGUAGE Pass ✅
POWERSHELL Pass ✅
PRE_COMMIT Pass ✅
SPELL_CODESPELL Pass ✅
TRIVY Pass ✅
YAML Pass ✅

All files and directories linted successfully

For more information, see the GitHub Actions workflow run

Powered by Super-linter

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@MariusStorhaug Marius Storhaug (MariusStorhaug) changed the title 🚀 [Feature]: Module repositories reconcile against one canonical template 🚀 [Feature]: Module repositories can be audited against one canonical template Aug 29, 2026
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates Process-PSModule’s plugin and documentation to support auditing module repositories against a single canonical Template-PSModule baseline, and aligns Zensical documentation behavior with folder-derived navigation and shared MSX presentation defaults.

Changes:

  • Adds a new read-only plugin skill (psmodule-repository-audit) to compare a repository against a recorded Template-PSModule commit while classifying template-owned vs repository-owned paths.
  • Updates migration skills/docs to treat Template-PSModule/.github/zensical.toml as the canonical module-site configuration and to omit explicit nav in favor of Zensical’s folder-derived navigation.
  • Vendors Tablesort locally for the docs site and adjusts linting to exclude minified third-party assets.

Reviewed changes

Copilot reviewed 18 out of 19 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
README.md Updates docs-site configuration guidance to reference Template-owned .github/zensical.toml.
docs/zensical.toml Removes manual nav/CSS and switches Tablesort dependency to a vendored local asset.
docs/overrides/assets/stylesheets/navigation.css Removes obsolete navigation-hiding CSS as folder-derived navigation is now intended.
docs/overrides/assets/javascripts/tablesort.min.js Adds vendored/minified Tablesort library used by the docs site.
docs/overrides/assets/javascripts/tablesort.js Adds keyboard activation support (Enter/Space) for sortable table headers.
docs/content/reference/repository-standard.md Documents template ownership/reconciliation and the canonical .github/zensical.toml/no-nav contract.
docs/content/reference/pipeline-stages.md Updates docs-stage description to reflect resolving canonical .github/zensical.toml and native navigation.
docs/content/guides/structuring-your-module.md Aligns module structure guidance with template-owned Zensical profile and no-nav behavior.
docs/content/guides/calling-the-workflow.md Updates workflow guidance to reference canonical template Zensical config resolution.
docs/content/get-started/repository-setup.md Updates setup guidance to keep the template .github/zensical.toml and rely on folder-derived navigation.
AGENTS.md Adds explicit “template impact” guidance for Process-PSModule changes.
.github/zensical.toml Removes the duplicate generated-module Zensical profile from this repo.
.github/workflows/Docs.yml Excludes minified assets from linting scope for docs workflow runs.
.github/plugin/README.md Documents the new psmodule-repository-audit skill.
.github/plugin/psmodule/skills/psmodule-zensical-migration/SKILL.md Reframes Zensical migration around canonical template profile + MSX precedence and folder-derived nav.
.github/plugin/psmodule/skills/psmodule-v8-upgrade/SKILL.md Updates v8 upgrade procedure to require repository audit + Pester migration subprocedures and template alignment.
.github/plugin/psmodule/skills/psmodule-repository-audit/SKILL.md Introduces the new audit skill definition and procedure.
.github/plugin/psmodule/plugin.json Bumps plugin version to 1.1.0 and adds a keyword.
.github/plugin/marketplace.json Bumps marketplace/plugin version metadata to 1.1.0.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 18 out of 19 changed files in this pull request and generated no new comments.

@MariusStorhaug Marius Storhaug (MariusStorhaug) added the release:minor Publish a minor release. label Aug 29, 2026
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Marius Storhaug (MariusStorhaug) added a commit that referenced this pull request Nov 11, 2026
Module authors get direct, evergreen procedures for bootstrap,
coordinated development, framework-test exceptions, validation, module
tests, and plugin-skill authoring. Descriptions state supported facts;
procedures use active instructions and explicit conditions.

This change revises guidance only. It requires no module, workflow,
configuration, or dependency migration. Executable examples and
runtime/version constraints remain unchanged.

<!-- ANNOUNCEMENT STOP -->

## Changed: Module guides state direct procedures and supported facts

The six guides replace conversational, vague, and future-delivery
wording with present-state descriptions and verifiable actions. The test
guide names the v5.1.1 action contract that the workflow uses and states
its unsupported optional-control limitation without a future
implementation promise. Its Pester declaration keeps the exact minimum
and maximum from the existing code block, without the misleading `6.1.x`
prose label.

The bootstrap version-policy conflict and OS-qualified shared-resource
example conflict remain explicit follow-ups. This prose delivery does
not choose a new version policy or change executable examples.

<details>
<summary>Technical details</summary>

**Source comparison and delivery.** Base
`64ffb1d87f86bd5d487891fdb140b78385a00531`; final pushed head
`d33a7e1773f9bde2527ae94fea7a8ed2c22a4acf`. Six small commits are
pushed. This draft opened immediately after the first coherent commit,
`5f5062cca628831bc4f3de8864c84bb2759ed6f7`. It stays in draft by
request. No merge, auto-merge, Agent merge, or additional child session
is used.

**Manual review and before/after evidence.** Every assigned file is read
in full before edits and in the final review, including unchanged
passages and examples. All six files change; no assigned guide is
omitted or given an unverified no-change result.

| Exact changed path | Before | After |
| --- | --- | --- |
| `docs/content/get-started/module-bootstrap.md` | "the piece(s) every
other function will depend on"; "first real release" | "contains the
components that all other module functions require"; "first release
(`v1.0.0`)". |
| `docs/content/guides/module-development-orchestration.md` | "a second
place where the implementation is silently changed" | "The orchestrator
does not change a child's implementation without a recorded scope
decision." |
| `docs/content/guides/skipping-framework-tests.md` | "will cause the
framework to skip"; "will log a warning" | "The framework skips only the
identified test for that file. It writes the supplied reason as a
warning in the build output." |
| `docs/content/guides/validating-before-review.md` | "current enough
that generated documentation will stay accurate" | "public-function
links resolve and usage examples match the implemented parameters and
outputs". |
| `docs/content/guides/writing-module-tests.md` | "will expose them
after"; "current v5.1.0"; a `6.1.x` label for a broader declaration |
The pinned v5.1.1 contract does not accept the optional controls; the
reusable workflow does not expose them. The declaration is introduced as
"this Pester requirement". |
| `docs/content/guides/writing-plugin-skills.md` | "an operational entry
point for an agent; shared process and policy belongs" | "A skill is an
agent's entry point. Shared process and policy belong in the
documentation". |

**Meaning and protected content.** The immutable source comparison
verifies 10 byte-identical fenced examples, 54 headings unchanged except
sentence case, and all 85 distinct per-file inline technical tokens
retained. Manual comparison preserves public inputs/defaults, paths,
framework-test IDs, warning semantics, discovery precedence, bootstrap
rules, caller-provided `TestData`, and normative requirement strength.
No normative requirement is presented as proof of CI enforcement. No
link repair requires another owner's file.

**Writing sources.** The fixed writing baseline is
`MSXOrg/docs@1b0d4893c8fefabe604d04393068a8ff6f848082`: [Natural
Language](https://github.com/MSXOrg/docs/blob/1b0d4893c8fefabe604d04393068a8ff6f848082/src/docs/Coding-Standards/Natural-Language.md),
[Writing
Guide](https://github.com/MSXOrg/docs/blob/1b0d4893c8fefabe604d04393068a8ff6f848082/src/docs/Coding-Standards/Writing-Guide.md),
[Markdown](https://github.com/MSXOrg/docs/blob/1b0d4893c8fefabe604d04393068a8ff6f848082/src/docs/Coding-Standards/Markdown.md),
[Documentation](https://github.com/MSXOrg/docs/blob/1b0d4893c8fefabe604d04393068a8ff6f848082/src/docs/Coding-Standards/Documentation.md),
[Documentation
Model](https://github.com/MSXOrg/docs/blob/1b0d4893c8fefabe604d04393068a8ff6f848082/src/docs/Ways-of-Working/Documentation-Model.md),
and the [guide
template](https://github.com/MSXOrg/docs/blob/1b0d4893c8fefabe604d04393068a8ff6f848082/src/docs/Ways-of-Working/Spec-Driven-Development-Templates.md#guide).

The review also uses the [STEMG
description](https://www.asd-ste100.org/about_STE.html), [STEMG
FAQ](https://www.asd-ste100.org/STE_faq.html), and [ASD-STE100 Issue
9](https://doi.org/10.5281/zenodo.23666006), including relevant writing
rules and dictionary entries. The reference PDF and extraction stay
local; the verified PDF MD5 is `9c720341c350ed77943b2c73d01c716f`. No
required writing source is unavailable. Automated checks do not prove
full STE conformance.

| Changed surface | Standards checked | Framework/source evidence
checked | Result |
| --- | --- | --- | --- |
| `module-bootstrap.md` | Fixed writing baseline and guide template |
Existing bootstrap branch/release contract; versioning reference |
Exception - #573 preserves the policy conflict.
|
| `module-development-orchestration.md` | Fixed writing baseline and
guide template | Existing child scope, handoff, integration, and
release-readiness contract | Fixed in this PR. |
| `skipping-framework-tests.md` | Fixed writing baseline and guide
template | Source-code `FunctionCount` skip handling and warning output
| Fixed in this PR. |
| `validating-before-review.md` | Fixed writing baseline and guide
template | Module structure, native-help, and test reference
requirements | Fixed in this PR. |
| `writing-module-tests.md` | Fixed writing baseline and guide template
| Discovery/settings source, test/setup/teardown workflows, and pinned
action interface | Exception - #571 preserves
the executable sample conflict. |
| `writing-plugin-skills.md` | Fixed writing baseline and guide template
| Existing plugin README, directory structure, plugin metadata, and
marketplace registration | Fixed in this PR. |

**Read-only inspections and justified no-change results.** Supporting
files/sections: `README.md`; `AGENTS.md`; `.gitignore`;
`.github/actions/Get-PSModuleSettings/src/main.ps1`;
`.github/actions/Test-PSModule/src/tests/SourceCode/PSModule/PSModule.Tests.ps1`;
`.github/workflows/workflow.yml`;
`.github/workflows/Test-ModuleLocal.yml`;
`.github/workflows/BeforeAll-ModuleLocal.yml`;
`.github/workflows/AfterAll-ModuleLocal.yml`;
`.github/workflows/Docs.yml`; `.github/workflows/Linter.yml`;
`.github/workflows/Release.yml`; `.github/linters/.markdown-lint.yml`;
`.github/linters/.textlintrc`; `.github/plugin/README.md`;
`.github/plugin/psmodule/plugin.json`;
`.github/plugin/marketplace.json`; `docs/zensical.toml`; and the
relevant sections of
`docs/content/reference/{versioning,powershell-module-standard,test-specification}.md`.
They need no edit because this delivery changes guide prose, not their
contracts, implementation, native help, tests, metadata, or
configuration.

The remote [Invoke-Pester action
contract](https://github.com/PSModule/Invoke-Pester/blob/c5494aba3c07d7bfd81bdbbc9f301e8fa4a729fb/action.yml)
is read at exact SHA `c5494aba3c07d7bfd81bdbbc9f301e8fa4a729fb`. The
v5.1.1 tag independently resolves to that commit. Its interface lacks
`Run.Shuffle`, `Run.ShuffleSeed`, `Run.Parallel`,
`Run.ParallelThrottleLimit`, and `Debug.ShowStartMarkers`. Neither
workflow action references nor Pester/runtime constraints change.

**Exclusions.** Every other repository path is excluded: other
getting-started and guide pages, reference pages, indexes,
specifications, dictionary pages, assets/site design, plugin
skills/metadata, code, tests/assertions, and configuration. Reserved
release/workflow/structure/configuration surfaces remain with
#524, #525,
#531, #535,
#537, #541,
#548, and #549.
#551 changes no documentation or native help.
Live open-PR path ownership is checked before every commit; no other PR
owns an assigned path.

**Checks on the final head.**

| Command or review | Result |
| --- | --- |
| `git diff --check 64ffb1d` | Pass. |
| `npx --no-install markdownlint-cli2 --config
.github\linters\.markdown-lint.yml` with the six exact assigned paths |
Pass: 6 files, 0 issues. |
| `zensical build --clean` from `docs` | Pass: "No issues found", exit
0. |
| Existing `rules.terminology` through `TextlintKernel.lintText` | Pass:
6 final guides, 0 issues; an intentional `Powershell` positive control
reports the `PowerShell` correction. |
| Standard-library scoped Markdown/generated-HTML link review | Pass: 33
relative links, 9 rendered fragments, 0 issues. |
| Exact committed `git show` source comparisons | Pass: 10
byte-identical fences, 54 stable headings, 85 retained per-file inline
technical tokens, exact six-file scope. |
| Six original wording cases | Each fails on the original baseline and
passes at the final head. The additional misleading Pester-range label
is absent. |
| `ConvertFrom-Json` on plugin and marketplace metadata | Pass; both
files are unchanged. |

The direct terminology CLI is absent; the cache-only attempt confirms
missing packages before a session-local restore. Its Windows CLI loader
does not load the configured rule. The successful kernel invocation
loads the existing Markdown parser and exact `rules.terminology` options
from `.github/linters/.textlintrc`, with an active positive control. No
repository dependency, linter, or configuration is added. No standalone
link-check script exists in this snapshot; the scoped check uses
Python's standard library and actual generated HTML. It does not claim
exhaustive external-site validation. Generated site output and the
temporary checker restore are removed after verification; the worktree
is clean and local/remote commit counts are `0 0`.

**Hosted status on the final head.** `gh pr checks 565 --repo
PSModule/Process-PSModule --json name,state,link` reports 22 successful
checks, one skipped Publish check, and no pending or failed checks.
Copilot approves `d33a7e1773f9bde2527ae94fea7a8ed2c22a4acf` with "No
open issues" and no inline comments. Final-head Build, Lint, Lint code
base, CodeQL, and Analyze (actions) pass. No new local failure or scope
blocker remains. The PR stays in draft for the requested acceptance
review; these results do not authorize readiness or merge.

**Plan and convergence.** #559 contains the
current Task plan, pre-edit evidence, final acceptance evidence, and
check results. Its author-side implementation steps are complete; the
issue stays open until the normal review/merge path completes. The
scoped sweep examines campaign issue titles and declared paths, plus
bootstrap/major, version-policy, and `RUNNER_OS` searches. Only
#559 is fully covered.
#571 and #573 remain
non-closing follow-ups; other campaign issues name excluded surfaces.
The docs-only path set does not invoke the release workflow, so no
release-decision block or `release:*` label applies.

</details>

<details>
<summary>Related references</summary>

- Resolves #559
- References #571
- References #573

</details>
Marius Storhaug (MariusStorhaug) added a commit that referenced this pull request Nov 11, 2026
Entry pages describe the framework's reusable PowerShell modules, GitHub
Actions workflows, and task automation in direct, present-tense English.
The coverage example states its existing minimum of 80%, and the changed
descriptive text uses en-US spelling. No consumer action is needed for
these prose edits.

<!-- ANNOUNCEMENT STOP -->

## Changed: Entry guidance describes existing automation directly

The README and site index use direct descriptions instead of promotional
or time-relative wording. The coverage example says `at least 80%`
because the existing implementation rejects coverage only when it is
below the target. The release guide changes only two descriptive uses of
`labelled` to `labeled`.

The edits preserve the documented capabilities, supported scope,
destinations, examples, and obligations. They do not change the
framework, caller interface, configuration, release behavior, or site
design. The complete fixed-secret/TestData adoption section stays
intact. Its separate source-bound decision remains open in
#578.

<details>
<summary>Technical details</summary>

### Exact delivery source and plan

| Item | Identity |
| --- | --- |
| Repository | `PSModule/Process-PSModule` |
| Base | `main` at `64ffb1d87f86bd5d487891fdb140b78385a00531` |
| Head | `entry-guidance-prose` at
`79bac09b581e80b27bae5dad5d87adffac0ff219` |
| Comparison | Four files, 10 insertions, 10 deletions |
| First real commit | `93b95eb6935d43c3e350bcdd293e19c128dc7aa3`; this
draft opened immediately after that push |
| Final state | Five small commits pushed; draft; no auto-merge; no
labels |

This is a fresh main-based delivery, not an amendment to a proposal or
first-pass PR. The owner handback includes the explicit extension for
the two adjacent index statements at original lines 80-81. No other
paragraph-rewrite permission is inferred from the spelling allowance.

The issue plan covers the full ten-page read, pinned writing sources,
pre-edit expectations, protection baselines, existing checks, early
draft, small commits, live ownership checks before each commit, the
source-backed threshold clarification, and the final acceptance record.
All scoped implementation and verification work is complete. Merge and
issue closure remain separate, future review actions.

### Before/after acceptance evidence

[The original pre-edit
record](#560 (comment))
records the source, expected edits, protection baseline, and existing
checks before repository changes. [The threshold clarification
record](#560 (comment))
records the parent review request and the below/equal/above experiment
before that follow-up edit. All eight exact replacement expectations
pass at the final head. They cover nine matches, including the two
release-spelling matches.

| Region | Before, at the exact base | After, at the exact head |
| --- | --- | --- |
| README opening | [Line
3](https://github.com/PSModule/Process-PSModule/blob/64ffb1d87f86bd5d487891fdb140b78385a00531/README.md#L3):
`corner-stone` paragraph | [Line
3](https://github.com/PSModule/Process-PSModule/blob/79bac09b581e80b27bae5dad5d87adffac0ff219/README.md#L3):
a direct core-workflow description; end-to-end GitHub Actions, all five
lifecycle capabilities, and the Gallery destination remain. |
| Index spelling | [Line
18](https://github.com/PSModule/Process-PSModule/blob/64ffb1d87f86bd5d487891fdb140b78385a00531/docs/content/index.md#L18):
`behaviour` | [Line
18](https://github.com/PSModule/Process-PSModule/blob/79bac09b581e80b27bae5dad5d87adffac0ff219/docs/content/index.md#L18):
`behavior`; the rest of the paragraph and `.github/PSModule.yml` remain
unchanged. |
| Released adjacent index statements | [Lines
80-81](https://github.com/PSModule/Process-PSModule/blob/64ffb1d87f86bd5d487891fdb140b78385a00531/docs/content/index.md#L80-L81):
`infuses GitHub ... fullest extent` and `DevOps functionality ...
missing` | [Lines
80-81](https://github.com/PSModule/Process-PSModule/blob/79bac09b581e80b27bae5dad5d87adffac0ff219/docs/content/index.md#L80-L81):
reusable PowerShell modules, GitHub Actions workflows, and automated
module delivery. No shipping, exclusivity, completeness, or enforcement
claim is added. |
| Index task automation | [Line
83](https://github.com/PSModule/Process-PSModule/blob/64ffb1d87f86bd5d487891fdb140b78385a00531/docs/content/index.md#L83):
`We empower ... effortlessly ... without distractions` | [Line
83](https://github.com/PSModule/Process-PSModule/blob/79bac09b581e80b27bae5dad5d87adffac0ff219/docs/content/index.md#L83):
repeated-task automation lets developers write code for PowerShell
solutions; both consumers and contributors remain explicit. |
| Index goal-setting link | [Line
85](https://github.com/PSModule/Process-PSModule/blob/64ffb1d87f86bd5d487891fdb140b78385a00531/docs/content/index.md#L85):
`Where we are headed ...` | [Line
85](https://github.com/PSModule/Process-PSModule/blob/79bac09b581e80b27bae5dad5d87adffac0ff219/docs/content/index.md#L85):
a neutral imperative link to the same goal-setting model; link text and
destination remain unchanged. |
| Index canonical guidance | [Line
89](https://github.com/PSModule/Process-PSModule/blob/64ffb1d87f86bd5d487891fdb140b78385a00531/docs/content/index.md#L89):
`are now canonical` | [Line
89](https://github.com/PSModule/Process-PSModule/blob/79bac09b581e80b27bae5dad5d87adffac0ff219/docs/content/index.md#L89):
`are canonical`; authority and destination remain unchanged. |
| Coverage example | [Lines
17-23](https://github.com/PSModule/Process-PSModule/blob/64ffb1d87f86bd5d487891fdb140b78385a00531/docs/content/guides/configuring-the-pipeline.md#L17-L23):
`will require that code coverage is 80% before passing` | [Lines
17-23](https://github.com/PSModule/Process-PSModule/blob/79bac09b581e80b27bae5dad5d87adffac0ff219/docs/content/guides/configuring-the-pipeline.md#L17-L23):
`This example runs all steps and requires at least 80% code coverage to
pass.` The exact YAML is unchanged. |
| Release-guide spelling | [Lines 22 and
58](https://github.com/PSModule/Process-PSModule/blob/64ffb1d87f86bd5d487891fdb140b78385a00531/docs/content/guides/versioning-and-releases.md#L22-L60):
`labelled` twice | [Lines 22 and
58](https://github.com/PSModule/Process-PSModule/blob/79bac09b581e80b27bae5dad5d87adffac0ff219/docs/content/guides/versioning-and-releases.md#L22-L60):
`labeled` twice; all other release guidance is identical. |

The complete changed-file comparison permits only these declared
replacements. All other text in those four files remains unchanged,
including the index introduction, the development-framework
heading/anchor, and every configuration/release example.

### Ten-page review and no-change results

All ten pages were read in full. The four changed paths and exact
regions are listed above. The other six pages need no correction under
the narrow spelling allowance. Their complete file bytes and Git blobs
remain unchanged. This is a scoped no-change result, not a claim that
every paragraph received an unrestricted rewrite or full STE
certification.

| Reviewed no-change path | Before and after | Identical blob |
| --- | --- | --- |
| `docs/content/get-started/index.md` |
[Before](https://github.com/PSModule/Process-PSModule/blob/64ffb1d87f86bd5d487891fdb140b78385a00531/docs/content/get-started/index.md)
/
[after](https://github.com/PSModule/Process-PSModule/blob/79bac09b581e80b27bae5dad5d87adffac0ff219/docs/content/get-started/index.md);
procedure and outcomes unchanged |
`72cc182b8e790c4b5420277d69a61de934a02791` |
| `docs/content/get-started/repository-setup.md` |
[Before](https://github.com/PSModule/Process-PSModule/blob/64ffb1d87f86bd5d487891fdb140b78385a00531/docs/content/get-started/repository-setup.md)
/
[after](https://github.com/PSModule/Process-PSModule/blob/79bac09b581e80b27bae5dad5d87adffac0ff219/docs/content/get-started/repository-setup.md);
setup, permissions, secrets, and caller YAML unchanged |
`790cf5eafb2946cad7c61398e7f80c7fcf6cc8a5` |
| `docs/content/get-started/your-first-release.md` |
[Before](https://github.com/PSModule/Process-PSModule/blob/64ffb1d87f86bd5d487891fdb140b78385a00531/docs/content/get-started/your-first-release.md)
/
[after](https://github.com/PSModule/Process-PSModule/blob/79bac09b581e80b27bae5dad5d87adffac0ff219/docs/content/get-started/your-first-release.md);
triggers, labels, and release conditions unchanged |
`e8b00fb1c220108790517d151dc59b707d895928` |
| `docs/content/guides/calling-the-workflow.md` |
[Before](https://github.com/PSModule/Process-PSModule/blob/64ffb1d87f86bd5d487891fdb140b78385a00531/docs/content/guides/calling-the-workflow.md)
/
[after](https://github.com/PSModule/Process-PSModule/blob/79bac09b581e80b27bae5dad5d87adffac0ff219/docs/content/guides/calling-the-workflow.md);
whole file unchanged, including the protected complete TestData adoption
section | `8e18d7e18025b68a1abd318c115719607d3683c3` |
| `docs/content/guides/github-app-authentication.md` |
[Before](https://github.com/PSModule/Process-PSModule/blob/64ffb1d87f86bd5d487891fdb140b78385a00531/docs/content/guides/github-app-authentication.md)
/
[after](https://github.com/PSModule/Process-PSModule/blob/79bac09b581e80b27bae5dad5d87adffac0ff219/docs/content/guides/github-app-authentication.md);
secret mapping, token scope, and permission ceilings unchanged |
`cf35933a019eaf977a8ce39ad940ab809edfe9b5` |
| `docs/content/guides/structuring-your-module.md` |
[Before](https://github.com/PSModule/Process-PSModule/blob/64ffb1d87f86bd5d487891fdb140b78385a00531/docs/content/guides/structuring-your-module.md)
/
[after](https://github.com/PSModule/Process-PSModule/blob/79bac09b581e80b27bae5dad5d87adffac0ff219/docs/content/guides/structuring-your-module.md);
layout, help URLs, dependency rules, and source-tree examples unchanged
| `c4f36cf327b9e5f045a02b7d05bbb54e7bb39334` |

| Changed path | Base blob | Head blob |
| --- | --- | --- |
| `README.md` | `c2d2257e3948184ebb8db36268f1c7490e0abcbc` |
`924672d74ec5927a3bc4b0591b0311cbd9f4e038` |
| `docs/content/index.md` | `02cc155fc51c96deba28eaf9ae1f9e899baf2d97` |
`03a57bba4e97779ec2e35b9764f024fcb37ba454` |
| `docs/content/guides/configuring-the-pipeline.md` |
`b77d4cdf2272ad592234076eec0a48afd692a926` |
`ae643ebc87483b2154091fa98a681be35416ae40` |
| `docs/content/guides/versioning-and-releases.md` |
`fe226002f077d1e0e7a01a01514d8112b3303317` |
`7694d507ba5f6b0f1d47bb9f2cf04e23d68a9578` |

### Exact contract-preservation results

The session-local, one-off comparison passes against the source tree. No
comparison script, prose inventory, enforcement tool, test, or
dependency is added to the repository.

| Protected surface across the ten pages | Result |
| --- | --- |
| 25 complete fenced blocks | Byte-identical, including every YAML,
command, JSON, tree, and example block |
| 66 headings | Identical; no heading, anchor source, or navigation
destination changes |
| 234 inline-code spans | Identical technical names, paths, inputs,
defaults, secrets, permissions, versions, labels, and expressions |
| 79 extracted Markdown link/image targets and the HTML image target |
Identical; no destination changes |
| Nine front-matter blocks | Identical |
| 75 normative modal tokens, in sequence | Identical; the complete
replacement comparison also protects all other contract wording outside
the released spans |
| Other repository paths | No diff; workflows, implementation, tests,
site configuration, assets, and design remain unchanged |

The protected [fixed-secret/TestData section, lines
76-104](https://github.com/PSModule/Process-PSModule/blob/79bac09b581e80b27bae5dad5d87adffac0ff219/docs/content/guides/calling-the-workflow.md#L76-L104),
including its heading, all seven old input names, mapping instructions,
and complete adoption example, is byte-identical. Its source-LF region
is 1,045 bytes with SHA-256
`96ac1034b74d2c76c8fc770d3f21a196b3d7cfd685210974d0a90d63bc61f54a` at
both base and head. The existing CRLF worktree region is 1,074 bytes
with SHA-256
`2a90ca000acc18720d4f281a8fb42e8b92206e9e968f9e70fc8dc3c39b37b05f`
before and after. The entire calling-guide blob is unchanged.

The coverage text retains this exact sample:

```yaml
Test:
  CodeCoverage:
    PercentTarget: 80
```

The [settings
reference](https://github.com/PSModule/Process-PSModule/blob/64ffb1d87f86bd5d487891fdb140b78385a00531/docs/content/reference/settings.md#L53-L55)
still defines the separate default as `0`. The [existing workflow
mapping](https://github.com/PSModule/Process-PSModule/blob/64ffb1d87f86bd5d487891fdb140b78385a00531/.github/workflows/Get-CodeCoverage.yml#L27-L35)
forwards that setting. The existing implementation [accepts coverage
greater than or equal to its
target](https://github.com/PSModule/Process-PSModule/blob/64ffb1d87f86bd5d487891fdb140b78385a00531/.github/actions/Get-PesterCodeCoverage/src/main.ps1#L157)
and [fails only below
target](https://github.com/PSModule/Process-PSModule/blob/64ffb1d87f86bd5d487891fdb140b78385a00531/.github/actions/Get-PesterCodeCoverage/src/main.ps1#L389-L396).
The pre-edit experiment executes those extracted comparisons with target
80: 79.99 fails, 80 passes, and 80.01 passes. `At least 80%` clarifies
this existing boundary; it does not change policy or behavior.

The built-site comparison passes 12 explicit checks. It confirms the new
prose, both reader roles, the existing development-framework anchor, the
goal-setting and canonical-guidance destinations, both `labeled`
sentences, the migration heading and all seven old input names, and the
exact decoded coverage YAML. Code text is read without inserting
whitespace between syntax-highlight spans.

### Existing checks and outcomes

The existing Markdown configuration passes on all ten pages before and
after the edits: markdownlint-cli2 0.24.0, markdownlint 0.42.0, 10
files, 0 issues. The existing codespell 2.4.2 CLI passes with the
repository configuration. The existing Zensical 0.0.50 build passes
before and after, reporting `No issues found`. The exact base-to-head
whitespace check passes.

These commands use the same ten-file set as the recorded runs:

```powershell
$pages = @(
    'README.md',
    'docs\content\index.md',
    'docs\content\get-started\index.md',
    'docs\content\get-started\repository-setup.md',
    'docs\content\get-started\your-first-release.md',
    'docs\content\guides\calling-the-workflow.md',
    'docs\content\guides\configuring-the-pipeline.md',
    'docs\content\guides\github-app-authentication.md',
    'docs\content\guides\structuring-your-module.md',
    'docs\content\guides\versioning-and-releases.md'
)
npx --no-install markdownlint-cli2 --config '.github\linters\.markdown-lint.yml' @pages
codespell --config '.github\linters\.codespellrc' @pages
Push-Location -LiteralPath 'docs'
zensical build --clean
Pop-Location
git --no-pager diff --check 64ffb1d 79bac09
```

No standalone link-check command exists in this repository. The existing
site build reports no issues; separate exact link/heading comparisons
and rendered destination checks confirm no link regression from these
edits. This is not a new internet-wide link-validation claim. An initial
`python -m codespell` invocation used the wrong entry point; the
existing `codespell` CLI passes. No repository dependency is changed.

Hosted snapshot at `2026-11-04T13:59:39Z`, for head
`79bac09b581e80b27bae5dad5d87adffac0ff219`:

| Hosted check | Result |
| --- | --- |
| [Docs
Build](https://github.com/PSModule/Process-PSModule/actions/runs/41842493106/job/126617424058)
| Success |
| [Docs
Lint](https://github.com/PSModule/Process-PSModule/actions/runs/41842493106/job/126617423266)
| Success |
| [Repository
lint](https://github.com/PSModule/Process-PSModule/actions/runs/41842493216/job/126617425457)
| Success |
|
[CodeQL](https://github.com/PSModule/Process-PSModule/runs/126617863969)
| Success |
| [Analyze
(actions)](https://github.com/PSModule/Process-PSModule/actions/runs/41842487969/job/126617413004)
| Success |
| [Fresh Copilot
review](#579 (review))
| Approved at the exact final head; no inline comments |
| [Docs
Publish](https://github.com/PSModule/Process-PSModule/actions/runs/41842493106/job/126617713362)
| Skipped for the pull-request event |

No hosted check or review remains pending at this snapshot. Earlier-head
approval is not used as final-head evidence. The parent current-head
content review also accepts `79bac09b581e80b27bae5dad5d87adffac0ff219`
after independently checking the complete four-file diff and the
protected structures across all ten pages. This content acceptance does
not change draft or merge state.

### Standards, ownership, and scope alignment

The fixed writing source is [MSXOrg/docs at
`1b0d4893c8fefabe604d04393068a8ff6f848082`](https://github.com/MSXOrg/docs/tree/1b0d4893c8fefabe604d04393068a8ff6f848082/src/docs).
The review covers Documentation Model; Natural Language; Writing Guide;
Markdown; Documentation; the guide/reference templates; and the Task,
PR, workflow, and commit formats. The official [STE
overview](https://www.asd-ste100.org/about_STE.html),
[FAQ](https://www.asd-ste100.org/STE_faq.html), and relevant Issue 9
rules/dictionary were consulted through the verified local manual. No
manual material is republished. These edits apply STE writing practices;
scans, counts, and lint do not establish full STE conformance.

| Changed surface | Standards checked | Framework/source docs checked |
Result |
| --- | --- | --- | --- |
| README opening | Pinned Natural Language, Writing Guide, Markdown,
Documentation, Documentation Model | Existing README and site-index
capabilities | Fixed in this PR |
| Released site-index spans and spelling | Same pinned writing standards
and artifact model | Source index and exact extended owner handback |
Fixed in this PR |
| Coverage-example description | Same pinned writing standards and guide
format | Settings reference, workflow input mapping, source coverage
comparison/failure boundary | Fixed in this PR |
| Release-guide descriptive spelling | Pinned en-US and Markdown rules |
Existing release paragraphs, examples, and settings references | Fixed
in this PR |

The source, issue scope, live owner heads, and intersecting paths are
rechecked before each of the five commits and at final handoff. The
source remains `64ffb1d87f86bd5d487891fdb140b78385a00531`. Active owner
heads are unchanged:

| Existing PR | Verified head |
| --- | --- |
| #524 |
`0fb4234056b3bd4574c58cd4edd6dff2544d70f6` |
| #525 |
`03e24f359265b7a4106f8f71f769cba1ba12bf3c` |
| #531 |
`50f16425797ec67375d47262c8c79d3507fb2b21` |
| #535 |
`7204e1eb418f99848c396f7e3597152a70e362ff` |
| #537 |
`af22c475873b21b8afa5ba7ecb87cb2bf8efabd2` |
| #548 |
`eb3eb0cb8fb6f0b7822c79ad9b2781d17127dcd4` |
| #549 |
`663d87b9c11e7d5662a986f662e4f7499e816f55` |
| #551 |
`7a00cbb9cd72baddf14d990019cf5da3c9c3600e`; no intersection with the
ten-page set |

#565 through #570
retain disjoint paths and unchanged heads. No existing owner branch is
awakened or edited. No new caller, release, compatibility, shipping, or
enforcement contract is imported from a proposal.

The issue-convergence search covers the open
`documentation-writing-alignment` issues and the active owners
intersecting this ten-page set. This diff resolves only
#560. It does not resolve the reserved
interface, source-contract, or TestData adoption work. No additional
closing reference is added.

No scoped wording decision remains. #578
retains the actual baseline/target, source-bound release-record,
compatibility, and exact #535 /
#537 owner decisions. This PR makes none of
those decisions.

The PR remains draft. No merge, ready transition, auto-merge, Agent
merge, release-label, or publication action is performed.

</details>

<details>
<summary>Related references</summary>

- Resolves #560
- References #578; protected source-bound
TestData adoption reconciliation remains separate and open.

</details>
Keep no-file PR authoring and supported PSModule.yml/SettingsPath intact.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI lite review requested due to automatic review settings November 11, 2026 17:28

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Two active documentation issues remain: the repository-standard supply-chain guidance conflicts with the new floating @v8 reference, and the audit skill duplicates shared policy instead of linking to the canonical documentation.

2 open issues

Review effort: Lite

Keep generated-site defaults in the shared standard and describe the controlled v8 caller consistently.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI lite review requested due to automatic review settings November 11, 2026 17:39

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Human assessment is needed because the changes contain moderate documentation inconsistencies and a critical template requirement conflict that could mislead audits and prevent new repositories from satisfying the stated standard.

No open issues 🎉

2 resolved since last review

Review effort: Lite

Marius Storhaug (MariusStorhaug) added a commit that referenced this pull request Nov 11, 2026
Migration skill readers can distinguish the selected immutable template
layout from the requested documentation layout. The v8 and Zensical
framing uses explicit present-tense conditions instead of time-dependent
or authoring-session statements. Consumer upgrade behavior does not
change, and no consumer action is required.

<!-- ANNOUNCEMENT STOP -->

## Fixed: Migration framing states its conditions

The v8 anatomy tree applies only when the selected immutable template
revision has that layout. The documentation framing states the
selected-template condition and the requested-v8-upgrade condition
directly. The Zensical starter configuration is conditional on the
selected immutable template revision; a `docs/` tree remains possible or
absent.

All supported layouts, paths, migration actions,
optional-versus-required distinctions, and preserve/report alternatives
remain unchanged. Documentation moves only when the existing
requested-migration condition applies. The Zensical procedure still
requires a successful site build before removal of obsolete active
configuration. This change does not perform or authorize a consumer
upgrade.

<details>
<summary>Technical details</summary>

### Exact delivery and source evidence

The scope is limited to the linguistic handback in
#561. Both complete skills are reviewed. Before
editing, exact source spans, expected replacements, and
protected-content checks were recorded in the issue and in session-local
JSON evidence. All three target statements were absent before editing
and match their recorded replacements in the accepted source tree.

| Released source | Before | After |
| --- | --- | --- |
| [v8 anatomy, source line
57](https://github.com/PSModule/Process-PSModule/blob/64ffb1d87f86bd5d487891fdb140b78385a00531/.github/plugin/psmodule/skills/psmodule-v8-upgrade/SKILL.md#L57)
| `The current template's default repository anatomy is:` | `If the
selected immutable template revision has this layout, its default
repository anatomy is:` |
| [v8 framing, source lines
127-133](https://github.com/PSModule/Process-PSModule/blob/64ffb1d87f86bd5d487891fdb140b78385a00531/.github/plugin/psmodule/skills/psmodule-v8-upgrade/SKILL.md#L127-L133)
| `the current template uses` and `this v8 upgrade request uses` | `If
the selected immutable template revision uses` the template
configuration, and `If the requested v8 upgrade uses` the listed
documentation paths. The optional asset distinction remains exact. |
| [Zensical framing, source lines
79-83](https://github.com/PSModule/Process-PSModule/blob/64ffb1d87f86bd5d487891fdb140b78385a00531/.github/plugin/psmodule/skills/psmodule-zensical-migration/SKILL.md#L79-L83)
| `The current ... repository historically stores` | `If the selected
immutable ... revision contains` the starter configuration. The
requested-layout and build-before-removal conditions remain exact. |

Scoped comparison: base `main` at
`64ffb1d87f86bd5d487891fdb140b78385a00531`; accepted source head
`21cc8b3c5f6f5bce6fe245ffd181fea5d0c496c4` on `migration-framing-prose`.
The two source commits are `c43c36e1012859388d378a838c27e318893d933c`
for the two v8 framing spans, then
`21cc8b3c5f6f5bce6fe245ffd181fea5d0c496c4` for the two-line Zensical
framing. This PR opened as a draft immediately after the first commit.
Live issue ownership and unchanged main source blobs were rechecked
before each source commit.

The preparation head is `3b7f435d5db009740fb32686652fefb5663ddf06`. Its
immediate parent is the accepted source head, and both full trees are
`37516ee1cda57797e1de094ea8078a3cace927c6`. This one ordinary empty
commit refreshes native PR evidence without a source change. Local,
origin, remote commit, and live PR identities match; the worktree is
clean.

Only these two files differ from the base, with 11 insertions and 8
deletions:

| File | Base blob | Head blob |
| --- | --- | --- |
| `.github/plugin/psmodule/skills/psmodule-v8-upgrade/SKILL.md` |
`0c27e026a451cccb60196bee04e398486d86aa0d` |
`be52d02d835f639786cff51122c3ecd873f98eb0` |
| `.github/plugin/psmodule/skills/psmodule-zensical-migration/SKILL.md`
| `b6e19feffb3afa6420b499f0166097c648d5ce2a` |
`c0f49052a8b25dde9be6f3cf60e45ed30926ca11` |

### Protected content

A one-off comparison reverses only the three recorded framing
replacements and compares every other source text byte exactly, with
CRLF normalized to LF. All ordered front matter, headings, fenced
blocks, inline literals, and links also compare exactly.

| Skill | Front matter | Headings | Fenced blocks | Inline literals |
Links |
| --- | --- | --- | --- | --- | --- |
| v8 upgrade | 1 | 11 | 6 | 62 | 13 |
| Zensical migration | 1 | 8 | 2 | 73 | 7 |

This protects the exact caller YAML, triggers, permissions, concurrency,
v8 reference, secrets, TestData examples, template/version selection,
anatomy tree, layout alternatives, optional source directories and test
phases, optional assets, migration actions, validation procedures, stop
conditions, and normative force. No example becomes universal. All other
skills, proposal branches, metadata, site design, runtime, repository
tests, and dependencies remain unchanged. No migration command runs.
Full-tree equality transfers this accepted source proof to the
preparation head without another source audit or tool installation.

### Existing local checks and limits

The source-delivery checks pass on both files: repository Markdown
configuration with zero issues (`markdownlint-cli2` 0.24.0,
`markdownlint` 0.42.0), repository spelling configuration, and `git diff
--check`. The existing YAML parser accepts both unchanged front-matter
maps; both unchanged plugin metadata JSON files parse. The one relative
skill target resolves. All 20 links remain exact. No standalone plugin
link/front-matter checker exists in this checkout; unchanged external
URLs are not claimed as network-checked.

The plain textlint CLI reports no rules before source edits and cannot
resolve its configured rule packages on this host. After the actual
missing-package failure during source delivery, those tools were
restored only in the npm cache. The existing `textlint` 15.8.0,
`terminology` 5.2.16, and `comments` 1.3.0 rules pass through their
installed API with the unchanged repository options and Markdown plugin:
zero messages on both immutable source files and both final files. An
anonymous incorrect-term probe confirms rule execution, and a comment
probe confirms the existing filter. No repository tooling or dependency
is added. No tool was installed for the source-identical refresh.

### Fresh native review on 2026-11-11

Before the refresh, exact accepted-head inventories contain zero check
runs, zero check suites, zero status contexts, and zero `pull_request`
workflow runs. The November 4 checks are no longer retained. This
confirmed absence permits the single normal empty trigger commit; no
existing run or suite is available to rerun. No reset, rebase, amend,
force push, workflow dispatch, or second trigger commit occurs.

The one explicit native Copilot review request is sent at
`2026-11-11T14:58:07.633Z` for
`3b7f435d5db009740fb32686652fefb5663ddf06`. Timeline event `35811053045`
records the request at `14:58:10Z`. Native review run `43043642020` has
event `dynamic`, exact head/base association with PR 581, and a
successful `copilot-pull-request-reviewer` job `130601746030`. Fresh
[review
`5860764388`](#581 (review))
approves that exact head at `14:59:40Z`; the author is
`copilot-pull-request-reviewer[bot]` with association `CONTRIBUTOR`.
Participant associations are read before feedback. Complete post-review
thread pagination reports zero threads and zero unresolved threads. No
finding or prose fix is required, and no second review is requested.

Historical review `5769461963` is dismissed and retains its November 4
submission time, even though GitHub reports its commit association on
the new head. It is not counted as fresh approval. The source-identical
diagnostic retry below does not require another review.

### Actual PR CI and both Linter attempts

| Actual native evidence | Event and source association | Result |
| --- | --- | --- |
| [Linter run `43043526453`, attempt 1, job
`130601329239`](https://github.com/PSModule/Process-PSModule/actions/runs/43043526453/job/130601329239)
| `pull_request`; PR 581; head
`3b7f435d5db009740fb32686652fefb5663ddf06`; base
`64ffb1d87f86bd5d487891fdb140b78385a00531` | Failure at
`2026-11-11T15:01:30Z`; POWERSHELL validator process crash. |
| [Same Linter run, attempt 2, job
`130606199466`](https://github.com/PSModule/Process-PSModule/actions/runs/43043526453/job/130606199466)
| Original `pull_request` event; same PR, head, base, and merge source;
failed-job diagnostic retry only | Success at `15:09:31Z`; actual
POWERSHELL validator success is verified below. |
| [CodeQL run
`43043522362`](https://github.com/PSModule/Process-PSModule/actions/runs/43043522362),
job `130601319547` (`Analyze (actions)`) | Native `dynamic` CodeQL
route; exact head; `refs/pull/581/head` | Success. `CodeQL` check
`130601595792` also succeeds on the exact head. |
| [Native review run
`43043642020`](https://github.com/PSModule/Process-PSModule/actions/runs/43043642020),
job `130601746030` | `dynamic/agents/copilot-pull-request-reviewer`;
exact head/base and PR 581 | Success; fresh exact-head approval above. |

The skill-only paths do not match Docs workflow path filters, so no
Docs/Pages run is expected. No version, release, publication,
consumer-upgrade, or dispatch-only check is required or manufactured by
this refresh.

### Attempt 1: observed runtime failure and source boundary

The failed job runs pinned Super-linter
`4ce20838b8ab83717e78138c5b3a1407148e0918` / container `v8.7.0`,
reporting PowerShell `7.6.2`. The POWERSHELL validator exits with
`Unhandled exception. System.ArgumentException: String cannot have zero
length.` The stack contains
`System.Reflection.AssemblyNameParser..ctor`,
`AssemblyNameParser.Parse`, and `AssemblyName.ParseAsAssemblySpec`. No
PowerShell file/line lint defect is reported. The sole check annotation
is the Ubuntu-latest migration notice, not this failure cause. The
complete failure log, version, exception, job metadata, and
source-boundary evidence are retained locally and in the leaf audit. The
available log does not establish a lower-level cause.

The actual PR merge ref is `ed067cb166fecee7058b7a296d04063dee28314c`,
with base and preparation-head parents. Its full tree is also
`37516ee1cda57797e1de094ea8078a3cace927c6`. The reviewed-parent-to-head
delta is empty, and the base-to-head
PowerShell/workflow/linter-configuration delta is empty. The only source
changes remain the three released Markdown framing spans.

On attempt 1, all 13 other Super-linter contexts succeed, including
MARKDOWN, NATURAL_LANGUAGE, SPELL_CODESPELL, and YAML. Only `--> Linted:
POWERSHELL`, status `58640569011`, is `error`. Those child passes do not
make attempt 1 pass. No introduced or directly coupled three-span prose
correction is demonstrated, and no source, workflow, runtime,
dependency, tooling, or policy change is made to force green.

### One authorized diagnostic retry: same source, successful result

The root coordinator explicitly authorizes one bounded same-event/head
failed-job diagnostic retry despite unproven transience. The sole native
`gh run rerun 43043526453 --failed` request is sent at
`2026-11-11T15:05:52.347Z` and succeeds at `15:05:54.227Z`. It reruns
only the failed job on the original PR event. No new trigger, dispatch,
installation, suppression, source/configuration/runtime change,
lifecycle change, or review re-request occurs. A bounded read-only
observer completes within its six-minute limit.

Attempt 2 runs job `130606199466` from `15:06:01Z` to `15:09:31Z`. Its
checkout log identifies the same merge ref
`ed067cb166fecee7058b7a296d04063dee28314c`. It reports the same `pwsh:
7.6.2` and `Successfully linted POWERSHELL` at `15:09:24Z`. New
POWERSHELL status `58641300307` is `success`, and all 14 latest
merge-ref status contexts are success. The four latest head checks are
also success: Linter, native reviewer, CodeQL, and Analyze (actions).

The runtime crash does not reproduce on this single diagnostic attempt.
No source fix is made, and the successful retry is not proof of the
original root cause. Attempt 1 remains recorded as failed; it is not
rewritten or hidden. No further retry is requested. No preparation
blocker remains in the current native gates; the root alone decides any
later merge/publication.

### Standards and completion boundary

The fixed [MSX writing
source](https://github.com/MSXOrg/docs/tree/1b0d4893c8fefabe604d04393068a8ff6f848082/src/docs)
supplies the Documentation Model, Natural Language, Writing Guide,
Markdown, Documentation, guide template, and Task/PR formats. The
official STE overview and FAQ, relevant Issue 9 rules and dictionary
entries, and en-US inform only the released wording. The [Issue
9](https://doi.org/10.5281/zenodo.23666006) manual stays local; its PDF
checksum matches the official record. No certified or full STE
conformance is claimed.

| Changed surface | Standards checked | Framework docs checked | Result
|
| --- | --- | --- | --- |
| Released v8 framing | Fixed MSX writing/documentation sources;
relevant STE guidance; en-US | README, complete skill, plugin guide, and
exact issue handback | Fixed in this PR |
| Released Zensical framing | Same fixed writing sources and applicable
guide format | Complete skill, plugin guide, and exact issue handback |
Fixed in this PR |

The README, plugin structure, shared guides, headings, anchors, and
metadata need no change for this bounded framing correction. Independent
content review accepts source head
`21cc8b3c5f6f5bce6fe245ffd181fea5d0c496c4`; the preparation head has the
identical full tree. Both skill diffs stay within the exact framing
handback and preserve templates, paths, optional/required distinctions,
scope, and procedure.

The PR remains open and non-draft under the user's later lifecycle
decision. Agent merge stays enabled for `address_reviews`, `fix_ci`, and
`resolve_conflicts`, with `merge_pr=false`; GitHub `auto_merge` remains
null. This preparation changes none of those settings, labels, or
schedules. The root coordinator alone controls the later global
merge/publication sequence. The issue stays open; no merge or
publication is authorized here.

Issue-convergence scope remains the exact handback and open
migration-title issues. No additional issue is fully resolved by this
two-file diff. Only #561 has a closing
reference.

</details>

<details>
<summary>Related references</summary>

- Resolves #561
- References #525,
#535, and #537 for
unchanged template/caller/authoring ownership.

</details>

---------

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Retain the template-backed baseline and no-file policy while preserving explicitly requested documentation layouts.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI lite review requested due to automatic review settings November 11, 2026 17:51
Keep the duplicate generated-module profile removed while retaining main documentation-site wording.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The upgrade skill contains an active documentation inconsistency that ambiguously describes how agents should invoke the repository audit procedure.

1 open issue

Review effort: Lite

Copilot AI lite review requested due to automatic review settings November 11, 2026 17:56
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Two active documentation issues remain: the upgrade skill references an unsupported audit mode, and the repository standard ambiguously identifies the required CONTRIBUTING.md path.

1 open issue
1 resolved since last review

Review effort: Lite

Copilot AI lite review requested due to automatic review settings November 11, 2026 18:00
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Human assessment is needed because unresolved plugin skill-discovery and marketplace-schema compatibility concerns could affect whether schema-validating clients can discover or install the plugin.

No open issues 🎉

1 resolved since last review

Review effort: Lite

Copilot AI lite review requested due to automatic review settings November 11, 2026 18:05

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Human assessment is needed because the change combines a critical plugin-manifest compatibility risk with moderate keyboard-accessibility and marketplace-schema concerns that may affect strict clients and users.

No open issues 🎉

Review effort: Lite

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

release:minor Publish a minor release.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add template-backed audits and canonical repository defaults

2 participants